# Darren
# 2025年02月18日09时14分48秒

# 可变类型 不可变类型
# 原理：一切皆引用
# 不可变类型 int,bool,float,complex,str,tuple(元组)
# 变量指向数据区不可修改，赋值会改变变量的饮用
def change(num):
    print(f"num={num},id(num)={id(num)}")
    num = 5
    print(f"函数内修改后num={num},id(num)={id(num)}")


a = 10
print(f"id(a)={id(a)}")
change(a)
print(f"函数外a={a},id(a)={id(a)}")
print('-' * 50)


# 可变数据类型 list(列表) dict(字典) 集合(set)
# 变量指向数据区可修改
def list_change(new_list):
    # new_list = [5, 2, 3] # 赋值，改变了变量对应存储地址（引用）(即另开辟了一片存储空间)
    new_list[0] = 5  # 改变数据空间的值，可变数据类型
    print(f'函数内{new_list}id={id(new_list)}')


my_list = [1, 2, 3]
list_change(my_list)
print(f'函数外{my_list}id={id(my_list)}')


# 全局变量 Python里，函数内部默认只能访问全局变量，不能直接修改全局变量。
# 如果要在函数内部修改全局变量，就需要使用 global关键字来声明。
def demo1():
    global num  # 函数内修改全局变量，须添加global关键字
    print(num)  # 不加global,python将函数中变量预解析，将num视为局部变量，而在执行本句前，num没定义
    num = 50
    print(num)


num = 100
demo1()
